home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Systemmonitors / Snoopy / Sources / misc.asm < prev    next >
Assembly Source File  |  1996-09-26  |  6KB  |  228 lines

  1.  
  2.         incpath    include:
  3.         maclib    sm.mac
  4.         macfile    macro.i
  5.         macfile    snoopy.i
  6.         macfile    extern/main
  7.         macfile    extern/parse
  8.  
  9.         section    main,code
  10.  
  11.         cnop    0,4
  12.  
  13. *******************************************************************************
  14. ;--------------    Diese Funktion konvertiert einen String in eine Zahl, wobei der
  15. ;--------------    String in Hexadezimal($),Dezimal(#),Oktal(@) oder Dual(%) vorliegen
  16. ;--------------    kann. Zusätzlich kann eine Voreinstellung angenommen werden, um
  17. ;--------------    z.B. ständige '#' bei rein Dezimalen Strings zu überbrücken.
  18. ;--------------    Irgendwann mal in absolut ferner Zukunft habe ich vor, hier noch
  19. ;--------------    einen 'Calculator' reinzuhängen: Damit wäre in jedem Programm,
  20. ;--------------    daß über StringToValue aus Strings Zahlen macht, gleich eine
  21. ;--------------    Taschenrechnerfunktion drinnen..
  22. ;--------------    => d0: ULONG Vordefinierter Typ des Strings
  23. ;--------------       a0: APTR Der String mit der Zahl
  24. ;--------------    <= d0: LONG Die (vorzeichenbehaftete) IntegerZahl
  25.         ENTRY    StringToValue,d1-d2
  26.         moveq    #10,d2
  27.         cmp.l    #STVFORMAT_HEX,d0
  28.         bne.b    .NotHex
  29.         moveq    #16,d2
  30. .NotHex        cmp.l    #STVFORMAT_BIN,d0
  31.         bne.b    .NotBin
  32.         moveq    #2,d2
  33. .NotBin        cmp.l    #STVFORMAT_OCT,d0
  34.         bne.b    .NotOct
  35.         moveq    #8,d2
  36. .NotOct        cmpi.b    #'-',(a0)
  37.         bne.b    .NormalUse
  38.         addq.l    #1,a0
  39.         bsr.b    .Check4Sign
  40.         bsr.b    .Get_s2v
  41.         neg.l    d0
  42.         bra    StringToValue_done
  43.  
  44. .NormalUse    bsr.b    .Check4Sign
  45.         bsr.b    .Get_s2v
  46.         bra    StringToValue_done
  47.  
  48. .Check4Sign    move.b    (a0),d0
  49.         cmpi.b    #STVTYPE_DEC,d0
  50.         bne.b    1$
  51.         moveq    #10,d2
  52.         addq.l    #1,a0
  53. 1$        cmpi.b    #STVTYPE_HEX,d0
  54.         bne.b    2$
  55.         moveq    #16,d2
  56.         addq.l    #1,a0
  57. 2$        cmpi.b    #STVTYPE_OCT,d0
  58.         bne.b    3$
  59.         moveq    #8,d2
  60.         addq.l    #1,a0
  61. 3$        cmpi.b    #STVTYPE_BIN,d0
  62.         bne.b    4$
  63.         moveq    #2,d2
  64.         addq.l    #1,a0
  65. 4$        moveq    #0,d0
  66.         rts
  67.  
  68. .Get_s2v    moveq    #0,d1
  69.         move.b    (a0)+,d1
  70.         cmpi.b    #'a',d1
  71.         blt.b    .NoUpcaseChose
  72.         cmpi.b    #'z',d1
  73.         bgt.b    .NoUpcaseChose
  74.         sub.b    #('a'-'A'),d1 
  75. .NoUpcaseChose     subi.b    #"0",d1
  76.         cmpi.b    #10,d1
  77.         bls.b    .s2v_Overdose
  78.         cmpi.l    #16,d2
  79.         bne.s    .s2v_Overdose
  80.         subq.b    #'A'-('9'+1),d1
  81. .s2v_Overdose    cmp.b    d2,d1
  82.         bcc.b    .s2v_Done
  83.         bsr.b    ExtendedMulu
  84.         add    d1,d0
  85.         bra.b    .Get_s2v
  86. .s2v_Done    rts
  87.         DONE    StringToValue
  88.  
  89. ;--------------    Diese Funktion Multipliziert zwei Langwerte
  90. ;--------------    => d1: LONG Wert 1 
  91. ;--------------       d2: LONG Wert 2
  92. ;--------------    <= d0: LONG Result
  93.         ENTRY    ExtendedMulu,d1-d2
  94.         cmpi.l    #$7FFF,d2
  95.         bcc.b    2$
  96.         cmpi.l    #$7FFF,d0
  97.         bcc.b    2$
  98.         mulu    d2,d0
  99.         bra.b    ExtendedMulu_done
  100. 2$        moveq    #0,d1
  101.         subq.l    #1,d2
  102. 1$        add.l    d0,d1
  103.         dbra    d2,1$
  104.         move.l    d1,d0
  105.         DONE    ExtendedMulu
  106.  
  107. *******************************************************************************
  108. ;--------------    clears an allocated list with all its elements
  109. ;--------------
  110. ;--------------    => a0: struct List *
  111. ;--------------       d0: LONG size of each element (0=don't call FreeMem() on it)
  112. ;--------------
  113.         ENTRY    RemoveList,d0-d7/a0-a6
  114.         movea.l    a0,a5
  115.         move.l    d0,d7
  116.         movea.l    (execBase).w,a6
  117. rl.LOOP        IFEMPTY    a5,rl.DONE
  118.         move.l    (LH_HEAD,a5),a4
  119.         movea.l    a5,a0
  120.         REMHEAD    
  121.         tst.l    d7
  122.         beq.b    rl.LOOP
  123.         movea.l    a4,a1
  124.         move.l    d7,d0
  125.         CALL    FreeMem
  126.         bra.b    rl.LOOP
  127. rl.DONE        DONE    RemoveList
  128.  
  129. ***********************************************************************************
  130. ;--------------    send message to window
  131. ;--------------    
  132. ;--------------    => a0: APTR string
  133. ;--------------     
  134.         ENTRY    ShowMessage,d0-d7/a0-a6
  135.  
  136. ;--------------    WARNING: SEGTRACKER() does its own thing
  137.         move.l    (window),d1
  138.         move.l    a0,d2
  139.         move.l    #outputArgs,d3
  140.         CALL    VFPrintf,<(dosBase)>
  141.         DONE    ShowMessage
  142.  
  143. ***********************************************************************************
  144. ;--------------    send error message to the default output stream
  145. ;--------------    
  146. ;--------------    => a0: APTR string
  147. ;--------------     
  148.         ENTRY    ShowErrorMessage,d0-d7/a0-a6
  149.         move.l    a0,d1
  150.         move.l    #outputArgs,d2
  151.         bsr.b    ShowWarning
  152.         DONE    ShowErrorMessage
  153.  
  154. *******************************************************************************
  155. ;--------------    print out some warning message
  156. ;--------------    
  157. ;--------------    => d1: APTR message
  158. ;--------------       d2: APTR arguments
  159.         ENTRY    ShowWarning,d0-d7/a0-a6
  160.         lea    (easyStruct),a1
  161.         move.l    #es_SIZEOF,(es_StructSize,a1)
  162.         move.l    #snoopyTitle,(es_Title,a1)
  163.         move.l    d1,(es_TextFormat,a1)
  164.         move.l    #snoopyGadform,(es_GadgetFormat,a1)
  165.         CLEAR.L    a0,a2
  166.         movea.l    d2,a3
  167.         CALL    EasyRequestArgs,<(intBase)>
  168.         DONE    ShowWarning
  169.  
  170. ***********************************************************************************
  171. ;--------------    send error message to the default output stream
  172. ;--------------    
  173. ;--------------    => a0: APTR string
  174. ;--------------     
  175.         ENTRY    ShowEchoMessage,d1-d7/a0-a6
  176.         lea    (easyStruct),a1
  177.         move.l    #es_SIZEOF,(es_StructSize,a1)
  178.         move.l    #snoopyTitle,(es_Title,a1)
  179.         move.l    a0,(es_TextFormat,a1)
  180.         move.l    #snoopyEchoform,(es_GadgetFormat,a1)
  181.         CLEAR.L    a0,a2
  182.         suba.l    a3,a3
  183.         CALL    EasyRequestArgs,<(intBase)>
  184.         DONE    ShowEchoMessage
  185.  
  186. ***********************************************************************************
  187. ;--------------    show a DOS errorcode
  188.  
  189.         ENTRY    ShowDosError,d0-d7/a0-a6
  190.         CALL    IoErr,<(dosBase)>
  191.         move.l    d0,d1            ; code
  192.         moveq    #0,d2            ; header
  193.         move.l    #errorMsgBuffer,d3    ; buffer
  194.         move.l    #256,d4            ; len
  195.         CALL    Fault
  196.         move.l    #errorMsgBuffer,d1
  197.         moveq    #0,d2
  198.         bsr    ShowWarning
  199.         DONE    ShowDosError
  200.  
  201. *******************************************************************************
  202. ;--------------    c-style sprintf()-function using exec.library [no buffer overflow
  203. ;--------------    checking has been added (due to a general lazyness on my part)]
  204. ;--------------    
  205. ;--------------    => a0: APTR format string (see exec/RawDoFmt() for limitations)
  206. ;--------------       a1: APTR format data
  207. ;--------------       a2: APTR target string
  208.         ENTRY    SPrintf,d0-d3/a0-a3/a6
  209.         movea.l    a2,a3
  210.         lea    (sprintf_cout,pc),a2
  211.         CALL    RawDoFmt,<(execBase).w>
  212.         DONE    SPrintf
  213.  
  214. sprintf_cout    move.b    d0,(a3)+
  215.         rts
  216.  
  217. snoopyTitle    dc.b    'Snoopy ',_VALOF(VERSION),'.',_VALOF(REVISION),' Message',0
  218. snoopyGadform    dc.b    'Ok',0
  219. snoopyEchoform    dc.b    'Ok|Abort',0
  220.         even
  221.  
  222.         section    memory,bss
  223.  
  224. easyStruct    ds.b    es_SIZEOF
  225. errorMsgBuffer    ds.b    256
  226.  
  227.         end
  228.